/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package suministros.ejb30.DAO;

import java.math.BigDecimal;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import javax.sql.DataSource;
import suministros.ejb30.TO.*;
import suministros.ejb30.entity.Almacen;
import suministros.ejb30.entity.DetallePedidoSuministro;
import suministros.ejb30.entity.DetallePedidoSuministroPK;
import suministros.ejb30.entity.Empresa;
import suministros.ejb30.entity.GrupoSuministros;
import suministros.ejb30.entity.Parametros;
import suministros.ejb30.entity.Pedido;
import suministros.ejb30.entity.ReservaSuministro;
import suministros.ejb30.entity.ReservaSuministroPK;
import suministros.ejb30.entity.SubAlmacen;
import suministros.ejb30.entity.Suministros;
import suministros.ejb30.entity.Tipo;
import suministros.ejb30.helper.Utiles_Convertir;
import suministros.ejb30.helper.Utiles_Fecha;

/**
 *
 * @author Renato
 */
@Stateless
public class SumiGestionPedidoDAO implements SumiGestionPedidoDAOLocal {
/*  @PersistenceContext(unitName="Suministros-ejbPU")
  protected EntityManager em;*/

  @Resource(name="jdbc/Administracion")
  DataSource dsAdministracion;

  @PersistenceUnit(unitName="suministros-pu")
     EntityManagerFactory emf;
  EntityManager em;

  @EJB
  SumiRegistrarPedidoLocal registrarPedido;

   @PostConstruct
      public void inicializaBean()
      {
        this.em = this.emf.createEntityManager();
      }

    @PreDestroy
      public void finalizaBean() {
        this.em.close();
      }
  public List<ZonaTO> getListaZonas() throws Exception
  {
    Query consulta = this.em.createNativeQuery("SELECT id_zona, nom_zona FROM zona");
    return Utiles_Convertir.convertirToBeanBinding_Zona(consulta.getResultList());
  }

  public List<LocalidadTO> getListaLocalidadesZona(String idZona) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT id_localidad, nom_localidad, id_zona FROM localidad where id_zona='" + idZona + "'");

    return Utiles_Convertir.convertirToBeanBinding_Localidad(consulta.getResultList());
  }

  public List<LocalidadTO> getListaLocalidades() throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT id_localidad, nom_localidad, id_zona FROM localidad");
    return Utiles_Convertir.convertirToBeanBinding_Localidad(consulta.getResultList());
  }

  public List<UnidadOrganizativaTO> getListaUnidOrganizativas() throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT cod_Uni_Organizativa, Unidad_Organizativa, cod_area, cod_Uni_Depend, nivel FROM Unidad_Organizativa");

    return Utiles_Convertir.convertirToBeanBinding_UnidadOrganizativa(consulta.getResultList());
  }

  public List<CentroCostoTO> getListaCentroCostos() throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT Cod_CentroCosto, Centro_Costo, id_cod_presupuestal, cod_uni_Organizativa FROM Centro_Costo");

    return Utiles_Convertir.convertirToBeanBinding_CentroCostos(consulta.getResultList());
  }

  public List<CodPresupuestalTO> getListaCodPresupuestal() throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT id_cod_presupuestal, desc_cod_presupuestal FROM cod_presupuestal");
    return Utiles_Convertir.convertirToBeanBinding_CodPresupuestal(consulta.getResultList());
  }

  public List<CuentaContableTO> getListaCtaCbles() throws Exception {
    Query consulta = this.em.createNativeQuery("select id_cuenta_contable,desc_cuenta from cuenta_contable");
    return Utiles_Convertir.convertirToTableBeanBinding_CuentaContable(consulta.getResultList());
  }

  public List<CodigosInversionTO> getListaCodigoInversion() throws Exception {
    Query consulta = this.em.createNativeQuery("select id_cod_inversion,descripcion from codigos_inversion");
    return Utiles_Convertir.convertirToTableBeanBinding_CodigosInversion(consulta.getResultList());
  }

  public List<TipoTO> getListaTipos() throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT id_tabla_tipo, tabla, descripcion_campo, codigo, descripcion_valor,cantidad FROM Tipo");

    return Utiles_Convertir.convertirToBeanBinding_Tipo(consulta.getResultList());
  }

  
  public TipoTO getTipoCampoCodigo(String campo, String codigo) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT id_tabla_tipo, tabla, descripcion_campo, codigo, descripcion_valor FROM Tipo where ltrim(descripcion_campo)='" + campo + "' and ltrim(codigo)='" + codigo + "'");
    return (TipoTO)Utiles_Convertir.convertirToBeanBinding_Tipo(consulta.getResultList()).get(0);
  }

  public String getIdPedido(Pedido pedido) throws Exception
  {
    String retorno = null;
    Connection cnx = null;
    try {
      Utiles_Fecha fecha = new Utiles_Fecha(pedido.getFechaemision());
      cnx = this.dsAdministracion.getConnection();
      CallableStatement csLlamada = cnx.prepareCall("{? = call [dbo].[f_sumi_getcodigoPedido](?,?,?,?)}");
      csLlamada.registerOutParameter(1, 12);
      csLlamada.setString(2,pedido.getEmpresa().getIdEmpresa().trim());
      csLlamada.setString(3, pedido.getIdZona().getIdZona().trim());
      csLlamada.setString(4, fecha.getAnio());
      csLlamada.setString(5, fecha.getMes());
      csLlamada.execute();
      retorno = csLlamada.getString(1);
    }
    catch (SQLException ex) {
      throw ex;
    } finally {
      try {
        cnx.close();
      } catch (Exception ex) {
        Logger.getLogger(SumiGestionPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
      }
    }
    return retorno;
  }

  public Parametros getParametroporId(String idParam) throws Exception {
    Query consulta = this.em.createNamedQuery("Parametros.findByIdParametro");
    consulta.setParameter("idParametro", idParam);
    return (Parametros)consulta.getSingleResult();
  }

  public List<Parametros> getListaParametros() throws Exception {
    Query consulta = this.em.createNamedQuery("Parametros.findAll");
    return consulta.getResultList();
  }
  public List<Parametros> getListaParametrosLike(String id) throws Exception {
    /*Query consulta = this.em.createNativeQuery("Select * from parametros where id_parametro like '" + id + "%'", Parametros.class);
    System.out.println("actualizoooo");
    System.out.println(((Parametros)(consulta.getResultList().get(1))).getParam2()+"--" +((Parametros)(consulta.getResultList().get(1))).getIdParametro());
    return consulta.getResultList();*/

     Query consulta = this.em.createNativeQuery("Select id_parametro, param1, param2, param3, param4, param5,descripcion," +
             "param7, param8, cont_familiar, param9, fecha, param10, paramEntero, paramTextoLargo from parametros" +
             " where id_parametro like '" + id + "%' ");

    return Utiles_Convertir.convertirToTableBeanBinding_ParametrosAtualizar(consulta.getResultList());


  }

  public List<SuministroTO> getListaSuministros() throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT Suministros.ID_Suministro, Suministros.descripcion, " +
            " Suministros.alta, Suministros.cod_Grupo_Sumi, " +
            "Suministros.tipo_unidad_medida, Suministros.tipo_stock, Tipo.descripcion_valor, " +
            "Grupo_Suministros.tipo_suministros,Suministros.ID_Suministro_descarte  FROM  Suministros  " +
            "INNER JOIN Grupo_Suministros ON Suministros.cod_Grupo_Sumi = Grupo_Suministros.cod_Grupo_Sumi " +
            "INNER JOIN Tipo ON  Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo");

    return Utiles_Convertir.convertirToTableBeanBinding_Suministros(consulta.getResultList());

  }
 

  public List<PedidoTO> getPedidosConsulta(String cod_unid_organica, String zonal, String ano, String mes, String empresa) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT Pedido.Cod_Pedido, localidad.nom_localidad," +
            "Tipo.descripcion_valor, convert(char(10),Pedido.Fecha_emision,103), " +
            "isnull(convert(char(10),Pedido.Fecha_atencion,103),'-'), Pedido.Cod_CentroCosto, " +
            "Pedido.id_cod_presupuestal, isnull(Pedido.id_cuenta_contable_inversion,'-'), " +
            "isnull(Pedido.id_cod_inversion,'-'), isnull(Pedido.Observaciones,''),Tipo.codigo," +
            " isnull(Pedido.id_proyecto,''),Pedido.id_tipo_orden,isnull(pr.nom_proyecto,''),isnull(uo.unidad_organizativa,'') FROM Pedido INNER JOIN localidad ON Pedido.id_localidad = localidad.id_localidad INNER JOIN Tipo ON Pedido.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join zona z on Pedido.id_zona = z.id_zona left join unidad_organizativa uo on Pedido.cod_uni_organizativa = uo.cod_uni_organizativa left join proyecto pr on Pedido.id_proyecto=pr.id_proyecto where Pedido.cod_Uni_Organizativa='" + cod_unid_organica + "' and Pedido.id_zona='" + zonal + "' " + "and Pedido.ano='" + ano + "' and Pedido.mes='" + mes + "' and Pedido.id_empresa='"+empresa+"'");

    return Utiles_Convertir.convertirToBeanBinding_Pedido(consulta.getResultList());
  }

  public List<PedidoTO> getPedidosAll(String empresa) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT Pedido.Cod_Pedido, localidad.nom_localidad," +
            "Tipo.descripcion_valor, convert(char(10),Pedido.Fecha_emision,103), " +
            "isnull(convert(char(10),Pedido.Fecha_atencion,103),'-'), Pedido.Cod_CentroCosto, " +
            "Pedido.id_cod_presupuestal, isnull(Pedido.id_cuenta_contable_inversion,'-'), " +
            "isnull(Pedido.id_cod_inversion,'-'), isnull(Pedido.Observaciones,''),Tipo.codigo," +
            " isnull(Pedido.id_proyecto,''),Pedido.id_tipo_orden,isnull(pr.nom_proyecto,''),isnull(uo.unidad_organizativa,'') FROM Pedido INNER JOIN localidad ON Pedido.id_localidad = localidad.id_localidad INNER JOIN Tipo ON Pedido.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join zona z on Pedido.id_zona = z.id_zona left join unidad_organizativa uo on Pedido.cod_uni_organizativa = uo.cod_uni_organizativa left join proyecto pr on Pedido.id_proyecto=pr.id_proyecto and Pedido.id_empresa='"+empresa+"'");

    return Utiles_Convertir.convertirToBeanBinding_Pedido(consulta.getResultList());
  }

  public List<DetallePedidoSuministroTO> getListaDetallePedidoSuministro(String cod_pedido) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT Detalle_Pedido_Suministro.Cod_Pedido,Suministros.ID_Suministro, Suministros.descripcion, Detalle_Pedido_Suministro.cantidad_pedida, Detalle_Pedido_Suministro.cantidad_atendida, Detalle_Pedido_Suministro.Observaciones, Tipo.descripcion_valor,p.id_proyecto,Detalle_Pedido_Suministro.id_almacen,Detalle_Pedido_Suministro.id_subalmacen FROM Detalle_Pedido_Suministro INNER JOIN Suministros ON Detalle_Pedido_Suministro.ID_Suministro = Suministros.ID_Suministro INNER JOIN Tipo ON Detalle_Pedido_Suministro.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join Pedido p on Detalle_Pedido_Suministro.Cod_Pedido=p.Cod_Pedido where Detalle_Pedido_Suministro.Cod_Pedido='" + cod_pedido + "'");

    return Utiles_Convertir.convertirToBeanBinding_DetallePedido(consulta.getResultList());
  }
  
  public List<AnoTO> getListaAnos() throws Exception {
    Query consulta = this.em.createNativeQuery("select distinct ano from orden order by 1");
    return Utiles_Convertir.convertirToBeanBinding_Ano(consulta.getResultList());
  }

  public List<MesTO> getListaMes() throws Exception {
    Query consulta = this.em.createNativeQuery("select distinct ano,mes from orden order by 1,2");
    return Utiles_Convertir.convertirToBeanBinding_Mes(consulta.getResultList());
  }


  public List eliminarPedido(String usuario, String mac, String cod_pedido) throws Exception {
    List retorno = new ArrayList(1);
    Query consulta = this.em.createNamedQuery("Pedido.findByCodPedido");
    consulta.setParameter("codPedido", cod_pedido);
    Pedido ped = (Pedido)consulta.getSingleResult();
    if (ped.getTipoEstadoPedido().getCodigo().trim().equalsIgnoreCase("NA")) {
      this.registrarPedido.eliminaPedido(usuario, mac,ped);
      retorno.add(new Boolean(true));
      retorno.add("");
    } else {
      retorno.add(new Boolean(false));
      retorno.add("El pedido ya fue atendido");
    }
    return retorno;
  }

    public List<ProyectoTO> getListaProyectos() throws Exception {
         Query consulta = this.em.createNativeQuery("SELECT id_proyecto, nom_proyecto, " +
                 "id_cod_presupuestal, id_cuenta_contable, id_cod_inversion, alta, codigo_proyecto_web,monto_total, " +
                 "monto_utilizado, SNIP, ruc_empresa " +
                 "FROM proyecto where alta=1");
        return Utiles_Convertir.convertirToBeanBinding_Proyecto(consulta.getResultList());
    }

    public List<NecesidadesSumiTO> getListaNecesidadesOperativas(String centro_costo, String ano, String empresa) throws Exception {
        String conss="SELECT     Necesidades_Sumi.cod_Uni_Organizativa," +
                "Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.ano, Necesidades_Sumi.ID_Suministro,  " +
                "Necesidades_Sumi.id_cod_presupuestal, Necesidades_Sumi.cantidad_total, " +
                "Necesidades_Sumi.fecha_operacion, Suministros.descripcion, " +
                "Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad FROM Necesidades_Sumi " +
                "INNER JOIN Suministros ON Necesidades_Sumi.ID_Suministro = Suministros.ID_Suministro " +
                "INNER JOIN Tipo ON Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
                "where Necesidades_Sumi.Cod_CentroCosto='"+centro_costo+"'  and Necesidades_Sumi.ano='"+ano+"' and Necesidades_Sumi.id_empresa='"+empresa+"'";
        Query consulta = this.em.createNativeQuery(conss);
       
        return Utiles_Convertir.convertirToNecesidadesTO_Necesidades(consulta.getResultList());
    }

     public List<NecesidadesSumiTO> getListaNecesidadesInversion(String cod_proy, String ano,String empresa) throws Exception{
        String conss="SELECT     Necesidades_Sumi.cod_Uni_Organizativa," +
                "Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.ano, Necesidades_Sumi.ID_Suministro,  " +
                "Necesidades_Sumi.id_cod_presupuestal, Necesidades_Sumi.cantidad_total, " +
                "Necesidades_Sumi.fecha_operacion, Suministros.descripcion, " +
                "Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad FROM Necesidades_Sumi " +
                "INNER JOIN Suministros ON Necesidades_Sumi.ID_Suministro = Suministros.ID_Suministro " +
                "INNER JOIN Tipo ON Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
                "where Necesidades_Sumi.id_proyecto='"+cod_proy+"'  and Necesidades_Sumi.ano='"+ano+"' and Necesidades_Sumi.id_empresa='"+empresa+"'";
        Query consulta = this.em.createNativeQuery(conss);

        return Utiles_Convertir.convertirToNecesidadesTO_Necesidades(consulta.getResultList());
    }
    public List<NecesidadesSumiDetalleTO> getListaDetalleNecesidadesRequerimientoOperativo(String centro_costo, String ano, String empresa) throws Exception {
        String conss="SELECT     Necesidades_Sumi_Detalle.id_zona, Necesidades_Sumi_Detalle.id_localidad, " +
                "localidad.nom_localidad, Necesidades_Sumi_Detalle.ID_Suministro, Necesidades_Sumi.id_necesidad, " +
                "Necesidades_Sumi_Detalle.mes01, Necesidades_Sumi_Detalle.mes02, " +
                "Necesidades_Sumi_Detalle.mes03, Necesidades_Sumi_Detalle.mes04, Necesidades_Sumi_Detalle.mes05, " +
                "Necesidades_Sumi_Detalle.mes06, Necesidades_Sumi_Detalle.mes07, Necesidades_Sumi_Detalle.mes08, " +
                "Necesidades_Sumi_Detalle.mes09, Necesidades_Sumi_Detalle.mes10, Necesidades_Sumi_Detalle.mes11, " +
                "Necesidades_Sumi_Detalle.mes12, Necesidades_Sumi_Detalle.sub_total, Necesidades_Sumi_Detalle.precio " +
                "FROM Necesidades_Sumi_Detalle INNER JOIN localidad ON " +
                "Necesidades_Sumi_Detalle.id_localidad = localidad.id_localidad INNER JOIN Necesidades_Sumi ON " +
                "Necesidades_Sumi_Detalle.id_necesidad = Necesidades_Sumi.id_necesidad " +
                "where Necesidades_Sumi.Cod_CentroCosto='"+centro_costo+"'  and Necesidades_Sumi.ano='"+ano+"' and Necesidades_Sumi.id_empresa='"+empresa+"'";
        Query consulta = this.em.createNativeQuery(conss);
        return Utiles_Convertir.convertirToNecesidadesSumiDetalleTO_NecesidadesSumiDetalle(consulta.getResultList());
    }

    public List<NecesidadesSumiDetalleTO> getListaDetalleNecesidadesRequerimientoInversion(String cod_proy, String ano, String empresa) throws Exception {
        String conss="SELECT     Necesidades_Sumi_Detalle.id_zona, Necesidades_Sumi_Detalle.id_localidad, " +
                "localidad.nom_localidad, Necesidades_Sumi_Detalle.ID_Suministro, Necesidades_Sumi.id_necesidad, " +
                "Necesidades_Sumi_Detalle.mes01, Necesidades_Sumi_Detalle.mes02, " +
                "Necesidades_Sumi_Detalle.mes03, Necesidades_Sumi_Detalle.mes04, Necesidades_Sumi_Detalle.mes05, " +
                "Necesidades_Sumi_Detalle.mes06, Necesidades_Sumi_Detalle.mes07, Necesidades_Sumi_Detalle.mes08, " +
                "Necesidades_Sumi_Detalle.mes09, Necesidades_Sumi_Detalle.mes10, Necesidades_Sumi_Detalle.mes11, " +
                "Necesidades_Sumi_Detalle.mes12, Necesidades_Sumi_Detalle.sub_total, Necesidades_Sumi_Detalle.precio " +
                "FROM         Necesidades_Sumi_Detalle INNER JOIN localidad ON " +
                "Necesidades_Sumi_Detalle.id_localidad = localidad.id_localidad INNER JOIN Necesidades_Sumi ON " +
                "Necesidades_Sumi_Detalle.id_necesidad = Necesidades_Sumi.id_necesidad " +
                "where Necesidades_Sumi.id_proyecto='"+cod_proy+"'  and Necesidades_Sumi.ano='"+ano+"'  and Necesidades_Sumi.id_empresa='"+empresa+"'";
        Query consulta = this.em.createNativeQuery(conss);        
        return Utiles_Convertir.convertirToNecesidadesSumiDetalleTO_NecesidadesSumiDetalle(consulta.getResultList());
    }

    public BigDecimal obtenerTotalDetalleRequerimiento(Long id_necesidad) throws Exception {
        String conss="select sum(sub_total) from Necesidades_Sumi_Detalle " +
                " where Necesidades_Sumi_Detalle.id_necesidad="+id_necesidad;
        Query consulta = this.em.createNativeQuery(conss);
        String res=((Vector)consulta.getSingleResult()).get(0).toString();        
        return new BigDecimal(res);
    }

     public List<DetalleOrdenTO> getListaDetallePedidoSuministroOrden(String cod_pedido) throws Exception {
          Integer tipo_admin =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_administradorTarea", "01")).getIdTablaTipo();
          Integer tipo_estado =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("id_tipo_estado_pedido", "AC")).getIdTablaTipo();
         Query consulta = this.em.createNativeQuery("SELECT dps.Cod_Pedido,s.ID_Suministro, s.descripcion, dps.cantidad_pedida,t1.descripcion_valor,0 as precio,p.cod_Uni_Organizativa,p.id_cod_presupuestal,p.id_cod_inversion,p.id_cuenta_contable_inversion,p.Cod_CentroCosto,p.id_zona,p.id_localidad,p.id_proyecto,0 as subtotal,dps.cta_cble1,dps.cta_cble2  FROM Detalle_Pedido_Suministro dps INNER JOIN Suministros s ON dps.ID_Suministro = s.ID_Suministro inner join Tipo t1 ON s.tipo_unidad_medida=t1.id_tabla_tipo inner join Pedido p on dps.Cod_Pedido=p.Cod_Pedido  where dps.Cod_Pedido='" + cod_pedido + "' and dps.Tipo_Estado_Pedido="+tipo_estado+" and dps.id_tipo_administrador_tarea="+tipo_admin);

         return Utiles_Convertir.convertirToBeanBinding_DetallePedidoOrden(consulta.getResultList());
    }

    public List<AlmacenTO> listaAlmacenEnZona(String cod_zona) throws Exception {
        Query consulta = this.em.createNativeQuery("SELECT id_almacen, descripcion FROM almacen where id_zona='"+cod_zona+"'");
        return Utiles_Convertir.convertirTOAlmacen_AlmacenTO(consulta.getResultList());

    }

    public List<SubAlmacenTO> listaSubAlmacenEnAlmacen(String cod_almacen) throws Exception {
        Query consulta = this.em.createNativeQuery("SELECT id_SubAlmacen, descripcion FROM SubAlmacen where idAlmacen='"+cod_almacen+"'");
        return Utiles_Convertir.convertirTOAlmacen_subAlmacenTO(consulta.getResultList());
    }

    public List<DetalleOrdenTO> getListaDetalleOrden(String cod_pedido) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<PedidoTO> getPedidosPorTipoOrden(List<ZonaTO> zonas_usuario, String id_empresa) throws Exception {
        Integer tipo_admin =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_administradorTarea", "01")).getIdTablaTipo();
        Integer tipo_orden =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_Orden", "01")).getIdTablaTipo();
        String zonas ="";
        for(ZonaTO z : zonas_usuario){
            if(zonas.length()==0)
                zonas+="'"+z.getId_zona()+"'";
            else
                zonas+=",'"+z.getId_zona()+"'";
        }
        Query consulta = this.em.createNativeQuery("SELECT distinct Pedido.Cod_Pedido, localidad.nom_localidad,Tipo.descripcion_valor, convert(char(10),Pedido.Fecha_emision,103), isnull(convert(char(10),Pedido.Fecha_atencion,103),'-'), Pedido.Cod_CentroCosto, Pedido.id_cod_presupuestal, isnull(Pedido.id_cuenta_contable_inversion,'-'), isnull(Pedido.id_cod_inversion,'-'), isnull(Pedido.Observaciones,''),Tipo.codigo, isnull(Pedido.id_proyecto,''),Pedido.id_tipo_orden,isnull(pr.nom_proyecto,''),isnull(uo.unidad_organizativa,'')  FROM Pedido INNER JOIN localidad ON Pedido.id_localidad = localidad.id_localidad  inner join Detalle_Pedido_Suministro dps on Pedido.Cod_Pedido = dps.Cod_Pedido INNER JOIN Tipo ON dps.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join zona z on Pedido.id_zona = z.id_zona left join unidad_organizativa uo on Pedido.cod_uni_organizativa = uo.cod_uni_organizativa left join proyecto pr on Pedido.id_proyecto=pr.id_proyecto where Pedido.id_tipo_orden=" + tipo_orden+"  and Tipo.codigo='AC' and dps.id_tipo_administrador_tarea=" + tipo_admin + " and Pedido.id_zona in(" + zonas + ") and Pedido.id_empresa='" + id_empresa + "'");

        return Utiles_Convertir.convertirToBeanBinding_Pedido(consulta.getResultList());
    }

     public List<PedidoTO> getPedidosPorTipoOrdenServicio(List<ZonaTO> zonas_usuario) throws Exception {
        Integer tipo_admin =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_administradorTarea", "01")).getIdTablaTipo();
        Integer tipo_orden =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_Orden", "02")).getIdTablaTipo();
        String zonas ="";
        for(ZonaTO z : zonas_usuario){
            if(zonas.length()==0)
                zonas+="'"+z.getId_zona()+"'";
            else
                zonas+=",'"+z.getId_zona()+"'";
        }
        Query consulta = this.em.createNativeQuery("SELECT distinct Pedido.Cod_Pedido, localidad.nom_localidad,Tipo.descripcion_valor, convert(char(10),Pedido.Fecha_emision,103), isnull(convert(char(10),Pedido.Fecha_atencion,103),'-'), Pedido.Cod_CentroCosto, Pedido.id_cod_presupuestal, isnull(Pedido.id_cuenta_contable_inversion,'-'), isnull(Pedido.id_cod_inversion,'-'), isnull(Pedido.Observaciones,''),Tipo.codigo, isnull(Pedido.id_proyecto,''),Pedido.id_tipo_orden,isnull(pr.nom_proyecto,''),isnull(uo.unidad_organizativa,'')  FROM Pedido INNER JOIN localidad ON Pedido.id_localidad = localidad.id_localidad  inner join Detalle_Pedido_Suministro dps on Pedido.Cod_Pedido = dps.Cod_Pedido INNER JOIN Tipo ON dps.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join zona z on Pedido.id_zona = z.id_zona left join unidad_organizativa uo on Pedido.cod_uni_organizativa = uo.cod_uni_organizativa left join proyecto pr on Pedido.id_proyecto=pr.id_proyecto where Pedido.id_tipo_orden=" + tipo_orden+"  and Tipo.codigo='AC' and dps.id_tipo_administrador_tarea=" + tipo_admin + " and Pedido.id_zona in(" + zonas + ")");

        return Utiles_Convertir.convertirToBeanBinding_Pedido(consulta.getResultList());
    }

    public List<DetallePedidoSuministroTO> getListaDetallePedidosAll() throws Exception {
       Query consulta = this.em.createNativeQuery("SELECT Detalle_Pedido_Suministro.Cod_Pedido,Suministros.ID_Suministro, Suministros.descripcion, Detalle_Pedido_Suministro.cantidad_pedida, Detalle_Pedido_Suministro.cantidad_atendida, Detalle_Pedido_Suministro.Observaciones, Tipo.descripcion_valor, Pedido.id_proyecto,Detalle_Pedido_Suministro.id_almacen,Detalle_Pedido_Suministro.id_subalmacen FROM Detalle_Pedido_Suministro INNER JOIN Suministros ON Detalle_Pedido_Suministro.ID_Suministro = Suministros.ID_Suministro INNER JOIN Tipo ON Detalle_Pedido_Suministro.Tipo_Estado_Pedido = Tipo.id_tabla_tipo  inner join Pedido on Pedido.Cod_Pedido=Detalle_Pedido_Suministro.Cod_Pedido");

        return Utiles_Convertir.convertirToBeanBinding_DetallePedido(consulta.getResultList());
    }

    public List<DetallePedidoSuministroTO> getDetallePedidosParaOrden(List<ZonaTO> zonas_usuario,String id_empresa) throws Exception {
         Integer tipo_orden =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_Orden", "01")).getIdTablaTipo();
         Integer tipo_admin =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_administradorTarea", "01")).getIdTablaTipo();
        Query consulta = this.em.createNativeQuery("SELECT Detalle_Pedido_Suministro.Cod_Pedido,Suministros.ID_Suministro, Suministros.descripcion, Detalle_Pedido_Suministro.cantidad_pedida, Detalle_Pedido_Suministro.cantidad_atendida, Detalle_Pedido_Suministro.Observaciones, Tipo.descripcion_valor, Pedido.id_proyecto,Detalle_Pedido_Suministro.id_almacen,Detalle_Pedido_Suministro.id_subalmacen FROM Detalle_Pedido_Suministro INNER JOIN Suministros ON Detalle_Pedido_Suministro.ID_Suministro = Suministros.ID_Suministro INNER JOIN Tipo ON Detalle_Pedido_Suministro.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join Pedido on Pedido.Cod_Pedido=Detalle_Pedido_Suministro.Cod_Pedido where Detalle_Pedido_Suministro.id_tipo_administrador_tarea="+tipo_admin+" and Tipo.codigo='AC' and Pedido.id_tipo_orden="+tipo_orden + " and Pedido.id_empresa='" + id_empresa + "' and Pedido.id_proyecto is null");

        return Utiles_Convertir.convertirToBeanBinding_DetallePedido(consulta.getResultList());
    }

    public List<DetalleOrdenTO> getListaDetallePedidoSuministroOrden(DetallePedidoSuministroPK pk_detalle_sumi) throws Exception {
        Query consulta = this.em.createNativeQuery("SELECT dps.Cod_Pedido,s.ID_Suministro, s.descripcion, dps.cantidad_pedida,t1.descripcion_valor,0 as precio,p.cod_Uni_Organizativa,p.id_cod_presupuestal,p.id_cod_inversion,p.id_cuenta_contable_inversion,p.Cod_CentroCosto,p.id_zona,p.id_localidad,p.id_proyecto, 0 as subtotal,dps.cta_cble1,dps.cta_cble2  FROM Detalle_Pedido_Suministro dps INNER JOIN Suministros s ON dps.ID_Suministro = s.ID_Suministro inner join Tipo t1 ON s.tipo_unidad_medida=t1.id_tabla_tipo inner join Pedido p on dps.Cod_Pedido=p.Cod_Pedido where dps.Cod_Pedido='" + pk_detalle_sumi.getCodPedido() + "' and dps.ID_Suministro='"+pk_detalle_sumi.getIDSuministro()+"'" );

         return Utiles_Convertir.convertirToBeanBinding_DetallePedidoOrden(consulta.getResultList());
    }

    public DetallePedidoSuministroTO getDetallePedidoSuministro(String cod_pedido, String cod_sumi) throws Exception {
         Query consulta = this.em.createNativeQuery("SELECT Detalle_Pedido_Suministro.Cod_Pedido,Suministros.ID_Suministro, Suministros.descripcion, Detalle_Pedido_Suministro.cantidad_pedida, Detalle_Pedido_Suministro.cantidad_atendida, Detalle_Pedido_Suministro.Observaciones, Tipo.descripcion_valor, Pedido.id_proyecto,Detalle_Pedido_Suministro.id_almacen,Detalle_Pedido_Suministro.id_subalmacen FROM Detalle_Pedido_Suministro INNER JOIN Suministros ON Detalle_Pedido_Suministro.ID_Suministro = Suministros.ID_Suministro INNER JOIN Tipo ON Detalle_Pedido_Suministro.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join Pedido p on dps.Cod_Pedido=p.Cod_Pedido where Detalle_Pedido_Suministro.Cod_Pedido='" + cod_pedido + "'");
         return Utiles_Convertir.convertirToBeanBinding_DetallePedido(consulta.getResultList()).get(0);
    }

    public List<PedidoTO> getPedidosPorTipoOrden(int tipo_orden, int estado_detalle) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Tipo getListaTipoSuministroPorIdSuministro(String id_tipo) throws Exception {
        Integer id=new Integer(((Vector )em.createNativeQuery("SELECT     Grupo_Suministros.tipo_suministros FROM     " +
                "    Suministros INNER JOIN Grupo_Suministros ON Suministros.cod_Grupo_Sumi = " +
                "Grupo_Suministros.cod_Grupo_Sumi " +
                "where Suministros.ID_Suministro='"+id_tipo+"'").getResultList().get(0)).get(0).toString());
        return em.find(Tipo.class, id);
    }

    public List<PedidoTO> getListaPedidosNoAtendidos(String cod_zona, String id_empresa) throws Exception {
        Integer estado_pedido =  Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("id_tipo_estado_pedido", "NA")).getIdTablaTipo();
        Query consulta = this.em.createNativeQuery("SELECT distinct Pedido.Cod_Pedido, localidad.nom_localidad,Tipo.descripcion_valor, convert(char(10),Pedido.Fecha_emision,103), isnull(convert(char(10),Pedido.Fecha_atencion,103),'-'), Pedido.Cod_CentroCosto, Pedido.id_cod_presupuestal, isnull(Pedido.id_cuenta_contable_inversion,'-'), isnull(Pedido.id_cod_inversion,'-'), isnull(Pedido.Observaciones,''),Tipo.codigo, isnull(Pedido.id_proyecto,''),Pedido.id_tipo_orden,isnull(pr.nom_proyecto,''),isnull(uo.unidad_organizativa,'')   FROM Pedido INNER JOIN localidad ON Pedido.id_localidad = localidad.id_localidad INNER JOIN Tipo ON Pedido.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join Detalle_Pedido_Suministro dps on Pedido.Cod_Pedido = dps.Cod_Pedido inner join zona z on Pedido.id_zona = z.id_zona left join unidad_organizativa uo on Pedido.cod_uni_organizativa = uo.cod_uni_organizativa left join proyecto pr on Pedido.id_proyecto=pr.id_proyecto  where Pedido.Tipo_Estado_Pedido="+estado_pedido + " and Pedido.id_zona ='" +cod_zona +"' and Pedido.id_empresa='" + id_empresa +"'" );

        return Utiles_Convertir.convertirToBeanBinding_Pedido(consulta.getResultList());
    }

    public boolean rechazarPedido(String cod_pedido, List<DetallePedidoSuministroTO> detalle) throws Exception {
         boolean retorno = false;
          EntityTransaction tx = this.em.getTransaction();
          tx.begin();
          try{
                 Pedido pd = this.em.find(Pedido.class, cod_pedido);
                 Tipo estado_rechazado =Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("id_tipo_estado_pedido", "RA"));
                 pd.setTipoEstadoPedido(estado_rechazado);
                 this.em.persist(pd);
                 for (DetallePedidoSuministroTO det : detalle){
                    DetallePedidoSuministro dp = this.em.find(DetallePedidoSuministro.class,new DetallePedidoSuministroPK(cod_pedido,det.getId_suministro()));
                    dp.setTipoEstadoPedido(estado_rechazado);
                    this.em.persist(dp);
                 }
                  this.em.flush();
                  tx.commit();
                  retorno = true;
          } catch (Exception e) {
                  tx.rollback();
                  throw e;
         }
        return retorno;
    }

    public boolean aceptarPedido(String cod_pedido, List<DetallePedidoSuministroTO> detalle) throws Exception {
         boolean retorno = false;
          EntityTransaction tx = this.em.getTransaction();
          tx.begin();
          try{
                 Pedido pd = this.em.find(Pedido.class, cod_pedido);
                 Tipo estado_aceptado =Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("id_tipo_estado_pedido", "AC"));
                 pd.setTipoEstadoPedido(estado_aceptado);
                 pd.setFechaatencion(new Date());
                 this.em.merge(pd);
                 for (DetallePedidoSuministroTO det : detalle){
                     Tipo admin_tarea;
                     String cuenta=null;
                      DetallePedidoSuministro dp = this.em.find(DetallePedidoSuministro.class,new DetallePedidoSuministroPK(cod_pedido,det.getId_suministro()));
                      dp.setTipoEstadoPedido(estado_aceptado);

                    if(det.getAdministrador_tarea().equalsIgnoreCase("APROVISIONAMIENTO")){
                        admin_tarea =Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_administradorTarea", "01"));
                        int tipo = this.em.find(Pedido.class,det.getCod_pedido()).getIdTipoOrden().getIdTablaTipo();
                        int tipo_bd = this.getTipoCampoCodigo("tipo_Orden", "01").getId_tabla_tipo();
                        if(tipo == tipo_bd){
                             Suministros sumi =  this.em.find(Suministros.class,det.getId_suministro()); 
                             cuenta = sumi.getCodGrupoSumi().getCuenta_compra();
                             dp.setCta_cble1(cuenta);
                        }

                        else{
                             Suministros sumi =  this.em.find(Suministros.class,det.getId_suministro());
                             cuenta = sumi.getCodGrupoSumi().getCuenta_servicio();
                             dp.setCta_cble2(cuenta);
                        }
                           
                    }
                        
                    else{
                        admin_tarea =Utiles_Convertir.convertirToTipo_TipoTO(this.getTipoCampoCodigo("tipo_administradorTarea", "02"));
                          ReservaSuministro rs = new ReservaSuministro(new ReservaSuministroPK(cod_pedido,det.getId_suministro()));
                            rs.setIdAlmacen(""+det.getId_almacen());
                            rs.setIdSubAlmacen(""+det.getId_subalmacen());
                            rs.setCantidad(det.getCantidad_pedida());
                            rs.setFechaOperacion(new Date());
                            rs.setEmpresa(new Empresa(det.getEmpresa_reserva()));
                            rs.setAno(det.getAnio_reserva());
                            rs.setMes(det.getMes_reserva());
                            rs.setUsuario(det.getUsuario_reserva());
                            rs.setMac(det.getMac_reserva());
                            this.em.persist(rs);

                            dp.setAlmacen(this.em.find(Almacen.class, ""+det.getId_almacen().intValue()));
                            dp.setSubAlmacen(this.em.find(SubAlmacen.class, ""+det.getId_subalmacen().intValue()));
                    }
                    dp.setIdTipoAdministradorTarea(admin_tarea);
                    this.em.merge(dp);
                  
                 }
                  this.em.flush();
                  tx.commit();
                  retorno = true;
          } catch (Exception e) {
                  tx.rollback();
                  throw e;
         }
        return retorno;
    }

    public List<PedidoTO> getPedidosConsultaInversion(String cod_proyecto, String zona, String ano, String mes) throws Exception {
       Query consulta = this.em.createNativeQuery("SELECT Pedido.Cod_Pedido, localidad.nom_localidad," +
            "Tipo.descripcion_valor, convert(char(10),Pedido.Fecha_emision,103), " +
            "isnull(convert(char(10),Pedido.Fecha_atencion,103),'-'), Pedido.Cod_CentroCosto, " +
            "Pedido.id_cod_presupuestal, isnull(Pedido.id_cuenta_contable_inversion,'-'), " +
            "isnull(Pedido.id_cod_inversion,'-'), isnull(Pedido.Observaciones,''),Tipo.codigo," +
            " isnull(Pedido.id_proyecto,''),Pedido.id_tipo_orden,isnull(pr.nom_proyecto,''),isnull(uo.unidad_organizativa,'')  FROM Pedido INNER JOIN localidad ON " +
            "Pedido.id_localidad = localidad.id_localidad INNER JOIN Tipo ON " +
            "Pedido.Tipo_Estado_Pedido = Tipo.id_tabla_tipo inner join zona z on Pedido.id_zona = z.id_zona left join unidad_organizativa uo on Pedido.cod_uni_organizativa = uo.cod_uni_organizativa left join proyecto pr on Pedido.id_proyecto=pr.id_proyecto  where Pedido.id_proyecto='" + cod_proyecto + "' and " +
            " Pedido.id_zona='" + zona + "' " + "and Pedido.ano='" + ano + "' and Pedido.mes='" + mes + "'");

    return Utiles_Convertir.convertirToBeanBinding_Pedido(consulta.getResultList());
    }

     public List<NecesidadesSumiTO> getListaNecesidadesOperativasAp(String centro_costo, String ano, String empresa, String zona) throws Exception {
        String conss="SELECT     Necesidades_Sumi.cod_Uni_Organizativa," +
                "Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.ano, Necesidades_Sumi.ID_Suministro,  " +
                "Necesidades_Sumi.id_cod_presupuestal,  sum(necesidades_sumi_Detalle.sub_total), " +
                "Necesidades_Sumi.fecha_operacion, Suministros.descripcion, " +
                "Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad, necesidades_sumi_Detalle.precio,Necesidades_Sumi.cantidad_aprobada FROM Necesidades_Sumi " +
                "INNER JOIN Suministros ON Necesidades_Sumi.ID_Suministro = Suministros.ID_Suministro " +
                "INNER JOIN Tipo ON Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
                " INNER JOIN necesidades_sumi_detalle on Necesidades_Sumi.id_necesidad= necesidades_sumi_detalle.id_necesidad " +
                " where Necesidades_Sumi.Cod_CentroCosto='"+centro_costo+"'  and Necesidades_Sumi.ano='"+ano+"' and necesidades_sumi_detalle.sub_total__aprobado ='0.00'" +
                " and Necesidades_Sumi.id_empresa='"+empresa+"'  and necesidades_sumi_detalle.id_zona='"+zona+"'" +
                " group by Necesidades_Sumi.ID_Suministro,  Suministros.descripcion,  Necesidades_Sumi.ano, " +
                " Necesidades_Sumi.cod_Uni_Organizativa, Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.id_cod_presupuestal, " +
                " Necesidades_Sumi.fecha_operacion, Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad,necesidades_sumi_Detalle.precio, " +
                " Necesidades_Sumi.cantidad_aprobada ";
        Query consulta = this.em.createNativeQuery(conss);

        return Utiles_Convertir.convertirToNecesidadesTO_NecesidadesPrecio(consulta.getResultList());
    }

     public List<NecesidadesSumiTO> getListaNecesidadesInversionAp(String cod_proy, String ano, String empresa) throws Exception{
        String conss="SELECT     Necesidades_Sumi.cod_Uni_Organizativa," +
                "Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.ano, Necesidades_Sumi.ID_Suministro,  " +
                "Necesidades_Sumi.id_cod_presupuestal, Necesidades_Sumi.cantidad_total, " +
                "Necesidades_Sumi.fecha_operacion, Suministros.descripcion, " +
                "Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad,  Necesidades_Sumi.cantidad_aprobada  FROM Necesidades_Sumi " +
                "INNER JOIN Suministros ON Necesidades_Sumi.ID_Suministro = Suministros.ID_Suministro " +
                "INNER JOIN Tipo ON Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
                " where Necesidades_Sumi.id_proyecto='"+cod_proy+"'  and Necesidades_Sumi.ano='"+ano+"' and  cantidad_aprobada ='0.00' " +
                " and Necesidades_Sumi.id_empresa='"+empresa+"'";
        Query consulta = this.em.createNativeQuery(conss);

        return Utiles_Convertir.convertirToNecesidadesTO_Necesidades(consulta.getResultList());
    }
      public List<NecesidadesSumiTO> getListaNecesidadesOperativasMod(String centro_costo, String ano, String empresa) throws Exception {
        String conss="SELECT     Necesidades_Sumi.cod_Uni_Organizativa," +
                "Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.ano, Necesidades_Sumi.ID_Suministro,  " +
                "Necesidades_Sumi.id_cod_presupuestal, Necesidades_Sumi.cantidad_total, " +
                "Necesidades_Sumi.fecha_operacion, Suministros.descripcion, " +
                "Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad, Necesidades_Sumi.cantidad_aprobada FROM Necesidades_Sumi " +
                "INNER JOIN Suministros ON Necesidades_Sumi.ID_Suministro = Suministros.ID_Suministro " +
                "INNER JOIN Tipo ON Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
                " where Necesidades_Sumi.Cod_CentroCosto='"+centro_costo+"'  and Necesidades_Sumi.ano='"+ano+"' " +
                " and Necesidades_Sumi.id_empresa='"+empresa+"'";

        Query consulta = this.em.createNativeQuery(conss);

        return Utiles_Convertir.convertirToNecesidadesTO_Necesidades(consulta.getResultList());
    }
       public List<NecesidadesSumiTO> getListaNecesidadesOperativasModZona(String centro_costo, String ano, String empresa, String zona) throws Exception {
        String conss="SELECT     Necesidades_Sumi.cod_Uni_Organizativa," +
                "Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.ano, Necesidades_Sumi.ID_Suministro,  " +
                "Necesidades_Sumi.id_cod_presupuestal,  sum(necesidades_sumi_Detalle.sub_total), " +
                "Necesidades_Sumi.fecha_operacion, Suministros.descripcion, " +
                "Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad, necesidades_sumi_Detalle.precio,sum(necesidades_sumi_detalle.sub_total__aprobado)" +
                " FROM Necesidades_Sumi INNER JOIN Suministros ON Necesidades_Sumi.ID_Suministro = Suministros.ID_Suministro " +
                "INNER JOIN Tipo ON Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
                " INNER JOIN necesidades_sumi_detalle on Necesidades_Sumi.id_necesidad= necesidades_sumi_detalle.id_necesidad " +
                " where Necesidades_Sumi.Cod_CentroCosto='"+centro_costo+"'  and Necesidades_Sumi.ano='"+ano+"'" +
                " and Necesidades_Sumi.id_empresa='"+empresa+"'  and necesidades_sumi_detalle.id_zona='"+zona+"'" +
                " group by Necesidades_Sumi.ID_Suministro,  Suministros.descripcion,  Necesidades_Sumi.ano, " +
                " Necesidades_Sumi.cod_Uni_Organizativa, Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.id_cod_presupuestal, " +
                " Necesidades_Sumi.fecha_operacion, Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad,necesidades_sumi_Detalle.precio, " +
                " Necesidades_Sumi.cantidad_aprobada ";
        Query consulta = this.em.createNativeQuery(conss);

        return Utiles_Convertir.convertirToNecesidadesTO_NecesidadesPrecio(consulta.getResultList());
    }
     public List<NecesidadesSumiTO> getListaNecesidadesInversionMod(String cod_proy, String ano, String empresa) throws Exception{
        String conss="SELECT     Necesidades_Sumi.cod_Uni_Organizativa," +
                "Necesidades_Sumi.Cod_CentroCosto, Necesidades_Sumi.ano, Necesidades_Sumi.ID_Suministro,  " +
                "Necesidades_Sumi.id_cod_presupuestal, Necesidades_Sumi.cantidad_total, " +
                "Necesidades_Sumi.fecha_operacion, Suministros.descripcion, " +
                "Tipo.descripcion_valor,Necesidades_Sumi.id_necesidad, Necesidades_Sumi.cantidad_aprobada FROM Necesidades_Sumi " +
                "INNER JOIN Suministros ON Necesidades_Sumi.ID_Suministro = Suministros.ID_Suministro " +
                "INNER JOIN Tipo ON Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
                " where Necesidades_Sumi.id_proyecto='"+cod_proy+"'  and Necesidades_Sumi.ano='"+ano+"'" +
                " and Necesidades_Sumi.id_empresa='"+empresa+"'";
       
        Query consulta = this.em.createNativeQuery(conss);

        return Utiles_Convertir.convertirToNecesidadesTO_Necesidades(consulta.getResultList());
    }

    public List<SuministroStockTO> getStockSuministro(String id_suministro, String empresa) throws Exception {
        String conss="select us.id_subalmacen,sum(us.cantidad),z.nom_zona as zona,al.descripcion as almacen,sa.descripcion as ubicacion,al.id_almacen "+
                        "from ubicacionsuministro us inner join zona z on us.id_zona=z.id_zona inner join almacen al on us.id_almacen=al.id_almacen inner join subalmacen sa on  us.id_subalmacen=sa.id_subalmacen "+
                            "where id_suministro='" + id_suministro + "' and us.id_empresa='"+empresa+"'" +
                                " group by us.id_subalmacen,z.nom_zona,al.descripcion,sa.descripcion,al.id_almacen";
        Query consulta = this.em.createNativeQuery(conss);

        return Utiles_Convertir.convertirTOSuministroStockTO(consulta.getResultList());
    }

    public BigDecimal verificarDisponibilidadSuministro(String codigo, boolean es_inversion,String loca,String ano,String mes,String id_sumi, String empresa) throws Exception {
        String conss1="select * from necesidades_sumi where id_suministro='"+id_sumi+"' and ano='"+ano+"' and id_empresa='"+empresa+"' ";

        if(es_inversion){
            conss1+=" and id_proyecto='"+codigo+"'";
        }else{
            conss1+=" and cod_centrocosto='"+codigo+"'";
        }
        Query consulta = this.em.createNativeQuery(conss1);
        if(consulta.getResultList().size()<1 ){
            throw new Exception("El suministro requerido no está dentro de su cuadro de necesidades!");
        }

        TipoTO aceptado=this.getTipoCampoCodigo("id_tipo_estado_pedido", "AC");
        TipoTO no_atendido=this.getTipoCampoCodigo("id_tipo_estado_pedido", "NA");
        TipoTO administradorNinguno=this.getTipoCampoCodigo("tipo_administradorTarea", "00");
        TipoTO administradorAlmacen=this.getTipoCampoCodigo("tipo_administradorTarea", "02");
        String conss2="select * from detalle_pedido_suministro inner join pedido on pedido.cod_pedido=detalle_pedido_suministro.cod_pedido " +
                "where detalle_pedido_suministro.id_suministro='"+id_sumi+"' and detalle_pedido_suministro.tipo_estado_pedido " +
                "in ("+aceptado.getId_tabla_tipo().toString()+","+no_atendido.getId_tabla_tipo().toString()+") and " +
                "pedido.id_localidad='"+loca+"' and detalle_pedido_suministro.id_tipo_administrador_Tarea in" +
                "("+administradorNinguno.getId_tabla_tipo().toString()+","+administradorAlmacen.getId_tabla_tipo().toString()+") ";
        if(es_inversion){
            conss2+=" and pedido.id_proyecto='"+codigo+"'";
        }else{
            conss2+=" and pedido.cod_centrocosto='"+codigo+"'";
        }

        Query consulta2 = this.em.createNativeQuery(conss2);
         if(consulta2.getResultList().size()>0 ){
            throw new Exception("El suministro está siendo solicitado en otro pedido para la misma localidad!");
        }
        
        String conss3="SELECT Necesidades_Sumi_Detalle.mes"+mes+"_aprobado -Necesidades_Sumi_Detalle.mes"+mes+"_usado "+
                        "FROM Necesidades_Sumi_Detalle INNER JOIN "+
                        "Necesidades_Sumi ON Necesidades_Sumi_Detalle.id_necesidad = Necesidades_Sumi.id_necesidad " +
                        "where Necesidades_Sumi_Detalle.id_suministro='"+id_sumi+"' and Necesidades_Sumi.ano='"+ano+"' " +
                        "and Necesidades_Sumi_Detalle.id_localidad='"+loca+"' ";
        if(es_inversion){
            conss3+=" and Necesidades_Sumi.id_proyecto='"+codigo+"'";
        }else{
            conss3+=" and Necesidades_Sumi.cod_centrocosto='"+codigo+"'";
        }
         Query consulta3 = this.em.createNativeQuery(conss3);
         BigDecimal retorno=BigDecimal.ZERO;
         try{
             retorno=new BigDecimal(((List)consulta3.getResultList().get(0)).get(0).toString());
         }catch(java.lang.ArrayIndexOutOfBoundsException exe){

         }
        return retorno;
    }
     public SuministroTO getSuministroEmpresa(String codigo, String empresa) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT Suministros.ID_Suministro, Suministros.descripcion, " +
            " Suministros.alta, Suministros.cod_Grupo_Sumi, " +
            "Suministros.tipo_unidad_medida, Suministros.tipo_stock, Tipo.descripcion_valor, " +
            "Grupo_Suministros.tipo_suministros,  se.stock, se.precioPromedio, se.valorTotal,se.id_empresa" +
            " FROM  Suministros  " +
            "INNER JOIN Grupo_Suministros ON Suministros.cod_Grupo_Sumi = Grupo_Suministros.cod_Grupo_Sumi " +
            "INNER JOIN Tipo ON  Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
            "inner join suministroEmpresa se on Suministros.ID_Suministro= se.id_suministro where  " +
            "Suministros.ID_Suministro= '"+codigo+"' and se.id_empresa='"+empresa+"'");

    return Utiles_Convertir.convertirToTableBeanBinding_SuministrosEmpresa(consulta.getResultList()).get(0);
   }
    public StockAlmacenTO getStockSuministroUbicacion(String codigo,String subalmacen, String empresa) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT id_suministro, id_subalmacen, stock_minimo, stock from" +
            " stockAlmacen where  stockAlmacen.ID_Suministro= '"+codigo+"' and stockAlmacen.id_empresa='"+empresa+"' " +
            "and stockAlmacen.id_subalmacen='"+subalmacen+"'");
    if(consulta.getResultList().size()>0){
        return Utiles_Convertir.convertirToTableBeanBinding_StockSubAlmacen(consulta.getResultList()).get(0);
    }
    else{
        return null;
    }
   
    }

    public List<StockAlmacenTO> getStockConsultar(String suministro, String subalmacen, String empresa, int tipo){
        String consulta="";
       
        if(tipo==3){
               consulta= "select se.id_suministro,  s.descripcion, t.descripcion_valor, stock from suministroempresa se " +
                    "inner join suministros s on se.id_suministro= s.id_suministro inner join tipo t on s.tipo_unidad_medida=t.id_tabla_tipo  where id_empresa='"+empresa+"'";

        }
        if(tipo==4){
               consulta= "select se.id_suministro,  s.descripcion, t.descripcion_valor, stock from suministroempresa se " +
                    "inner join suministros s on se.id_suministro= s.id_suministro inner join tipo t on s.tipo_unidad_medida=t.id_tabla_tipo where se.id_suministro='"+suministro+"' and id_empresa='"+empresa+"'";

        }
        Query consuquery = this.em.createNativeQuery(consulta);
        return Utiles_Convertir.convertirToTableBeanBinding_StockConsultar(consuquery.getResultList());

    }

    public List<FlujoPedidoTO> getFlujoPedido(String cod_pedido) throws Exception {
         Query consulta = this.em.createNativeQuery("select * from ((select case when p.fecha_atencion is null then '' "+
                                                                   " else convert(char(10),p.fecha_atencion,103) "+
                                                                   " end as fecha ,case when p.fecha_atencion is null then 'No atendido' "+
                                                                                                 "    when dps.id_tipo_administrador_tarea=75 then 'El Suministro '+  s.descripcion  + ' sera atendido por Aprovisionamiento '+' : '+rtrim(cast(dps.cantidad_pedida as char))+ ' '+t1.codigo "+
                                                                                                   "  when dps.id_tipo_administrador_tarea=76 then 'El Suministro '+  s.descripcion  + ' sera atendido por Almacen '+' : '+rtrim(cast(dps.cantidad_pedida as char))+ ' '+t1.codigo "+
                                                                                                   " end as estado,dps.id_suministro,s.descripcion,'' as codigo,'' as ruc,'' as proveedor,'' as observacion,p.fecha_operacion as fecha_sort,''  as tipo "+
                                                    " from pedido p inner join detalle_pedido_suministro dps on p.cod_pedido=dps.cod_pedido inner join suministros s on dps.id_suministro=s.id_suministro INNER JOIN tipo t1 on s.tipo_unidad_medida=t1.id_tabla_tipo where p.cod_pedido='"+cod_pedido+"') "+
                                                   " union "+
                                                    "(select convert(char(10),o.fecha_operacion,103) as fecha,'El Suministro '+s.descripcion+' fue atendido en la orden '+o.nro_orden+' : '+rtrim(cast(do.cantidad as char))+ ' '+t1.codigo,do.id_suministro,s.descripcion,o.nro_orden as codigo,o.cod_proveedor,pr.razon_social,'cantidad: '+rtrim(cast(do.cantidad as char))+',ingresada: '+rtrim(cast(do.cantidadIngresada as char)),o.fecha_operacion as fecha_sort,'01'  as tipo "+
                                                     "       from detalleorden do inner join pedido p on do.cod_pedido=p.cod_pedido inner join orden o on do.nro_orden=o.nro_orden inner join suministros s on do.id_suministro=s.id_suministro inner join proveedor pr on o.cod_proveedor=pr.cod_proveedor INNER JOIN tipo t1 on s.tipo_unidad_medida=t1.id_tabla_tipo "+
                                                      "              where do.cod_pedido='"+cod_pedido+"') "+
                                                   " union "+
                                                   " ( select convert(char(10),m.fecha_operacion,103) as fecha,'El Suministro '+s.descripcion+' ingresó a almacen con la nota '+m.id_movimiento+' : '+rtrim(cast(do.cantidadIngresada as char))+ ' '+t1.codigo,do.id_suministro,s.descripcion,m.id_movimiento as codigo,'','','',m.fecha_operacion as fecha_sort,'02'  as tipo "+
                                                           " from movimiento m inner join detalleorden do on m.nroOrden=do.nro_orden inner join suministros s on do.id_suministro=s.id_suministro inner join orden o on m.nroOrden=o.nro_orden INNER JOIN tipo t1 on s.tipo_unidad_medida=t1.id_tabla_tipo "+
                                                                            "where m.tipo_movimiento=79 and tipo_ingreso=81 and  do.cod_pedido='"+cod_pedido+"') "+
                                                   " union "+
                                                    "( select convert(char(10),m.fecha_operacion,103) as fecha,'El Suministro '+s.descripcion+' salió de almacen con la nota '+m.id_movimiento+' : '+rtrim(cast(dm.cantidad as char))+ ' '+t1.codigo,dm.id_suministro,s.descripcion,m.id_movimiento as codigo,'','','',m.fecha_operacion as fecha_sort,'03'  as tipo "+
                                                            "from movimiento m inner join detallemovimiento dm on m.id_movimiento=dm.id_movimiento inner join suministros s on dm.id_suministro=s.id_suministro  INNER JOIN tipo t1 on s.tipo_unidad_medida=t1.id_tabla_tipo "+
                                                                            "where m.tipo_movimiento=80 and m.cod_pedido='"+cod_pedido+"')) as c "+
                                                    "order by c.fecha_sort asc");

    return Utiles_Convertir.convertirToTableBeanBinding_FlujoPedidoTO(consulta.getResultList());
    }
    public List<SuministroTO> getDatosSuministroEmpresaRequeridos(String empresa, String zona) throws Exception {
        Parametros param=this.em.find(Parametros.class, "SU1");
        Query consulta = this.em.createNativeQuery("SELECT distinct Suministros.ID_Suministro, Suministros.descripcion, " +
            " Suministros.alta, Suministros.cod_Grupo_Sumi, " +
            "Suministros.tipo_unidad_medida, Suministros.tipo_stock, Tipo.descripcion_valor, " +
            "nsd.ano,  se.stock, se.precioPromedio, nsdd.precio,se.id_empresa, nsdd.id_zona " +
            "FROM  Suministros  " +
            "INNER JOIN Grupo_Suministros ON Suministros.cod_Grupo_Sumi = Grupo_Suministros.cod_Grupo_Sumi " +
            "INNER JOIN Tipo ON  Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo " +
            "inner join suministroEmpresa se on Suministros.ID_Suministro= se.id_suministro " +
            "inner join necesidades_sumi nsd  on Suministros.ID_Suministro= nsd.ID_Suministro " +
            " inner join necesidades_sumi_detalle nsdd on  Suministros.ID_Suministro= nsdd.ID_Suministro where  " +
            "se.id_empresa='"+empresa+"' and tipo_suministros<>'2' AND nsd.id_empresa='"+empresa+"'  and nsdd.id_zona='"+zona+"' and nsd.ano='"+param.getParam1()+"'");

    return Utiles_Convertir.convertirToTableBeanBinding_SuministrosEmpresaPrecio(consulta.getResultList());
   }
    public List<SuministroTO> getDatosServiciosEmpresaRequeridos(String empresa, String zona, String ccosto) throws Exception {
        Parametros param=this.em.find(Parametros.class, "SU1");
        Query consulta = this.em.createNativeQuery("SELECT     Suministros.ID_Suministro, " +
                "Suministros.descripcion,  Suministros.alta," +
                " Suministros.cod_Grupo_Sumi,    Suministros.tipo_unidad_medida, Suministros.tipo_stock, " +
                "Tipo.descripcion_valor, nsd.ano,sum(nsdd.sub_total), se.precioPromedio,nsdd.precio,se.id_empresa," +
                " nsdd.id_zona   FROM  Suministros  "+
                   " INNER JOIN Grupo_Suministros ON Suministros.cod_Grupo_Sumi = Grupo_Suministros.cod_Grupo_Sumi  " +
                   " INNER JOIN Tipo ON  Suministros.tipo_unidad_medida = Tipo.id_tabla_tipo  " +
                   " inner join suministroEmpresa se on Suministros.ID_Suministro= se.id_suministro  " +
                   " inner join necesidades_sumi nsd  on Suministros.ID_Suministro= nsd.ID_Suministro  " +
                   " inner join necesidades_sumi_detalle nsdd on  nsd.id_necesidad= nsdd.id_necesidad  " +
                   " where se.id_empresa='"+empresa+"' and tipo_suministros='2' AND nsd.id_empresa='"+empresa+"' " +
                   " and nsdd.id_zona='"+zona+"' and nsd.ano='"+param.getParam1()+"' and nsd.cod_centrocosto='"+ccosto+"'" +
                   " group by Suministros.ID_Suministro, Suministros.descripcion," +
                   " Suministros.Tipo_ABC, Suministros.alta, Suministros.codigo_anterior, Suministros.precio_mercado," +
                   " Suministros.fecha_ultimo_cotizacion, Suministros.especificaciones, Suministros.cod_Grupo_Sumi," +
                   " Suministros.tipo_unidad_medida, Suministros.tipo_stock, Tipo.descripcion_valor, " +
                   " nsd.ano,se.precioPromedio,nsdd.precio,se.id_empresa, nsdd.id_zona ");

    return Utiles_Convertir.convertirToTableBeanBinding_SuministrosEmpresaPrecio(consulta.getResultList());
   }
    public Boolean guardarPrecioRequerrimientos(List<SuministroTO> listasuministro) throws Exception
    {
        String retorno = null;
        Boolean estado=false;
        Connection cnx = null;
        try {
          for(SuministroTO sumi: listasuministro){
              cnx = this.dsAdministracion.getConnection();
              CallableStatement csLlamada = cnx.prepareCall("{ call [dbo].[sp_sumi_precioRequerrimientos](?,?,?,?,?,?)}");
              csLlamada.setString(1, sumi.getId_suministro());
              csLlamada.setString(2, sumi.getAno());
              csLlamada.setString(3, sumi.getZona());
              csLlamada.setString(4, sumi.getEmpresa());
              csLlamada.setBigDecimal(5, sumi.getPrecioActual());
              csLlamada.registerOutParameter(6, 12);
              csLlamada.execute();
              retorno = csLlamada.getString(6);
              estado=true;
          }

        }
    catch (SQLException ex) {

      Logger.getLogger(SumiGestionPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
      try {
        cnx.close();
      } catch (Exception ex) {
        estado=false;
        Logger.getLogger(SumiGestionPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
      }
    }
    return estado;
    }
    public Boolean guardarPrecioRequerrimientosServicios(List<SuministroTO> listasuministro, String ccosto) throws Exception
    {
        String retorno = null;
        Boolean estado=false;
        Connection cnx = null;
        try {
          for(SuministroTO sumi: listasuministro){
              cnx = this.dsAdministracion.getConnection();
              CallableStatement csLlamada = cnx.prepareCall("{ call [dbo].[sp_sumi_precioRequerrimientosServicios](?,?,?,?,?,?,?)}");
              csLlamada.setString(1, sumi.getId_suministro());
              csLlamada.setString(2, sumi.getAno());
              csLlamada.setString(3, sumi.getZona());
              csLlamada.setString(4, sumi.getEmpresa());
              csLlamada.setString(5, ccosto);
              csLlamada.setBigDecimal(6, sumi.getPrecioActual());
              csLlamada.registerOutParameter(7, 12);
              csLlamada.execute();
              retorno = csLlamada.getString(7);
              estado=true;
          }
        }
    catch (SQLException ex) {

      Logger.getLogger(SumiGestionPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
      try {
        cnx.close();
      } catch (Exception ex) {
        estado=false;
        Logger.getLogger(SumiGestionPedidoDAO.class.getName()).log(Level.SEVERE, null, ex);
      }
    }
    return estado;
    }


     public List<ReservaSuministroTO> getReservasSuministros(String id_empresa) throws Exception {
        Query consulta = this.em.createNativeQuery("SELECT id_almacen, id_SubAlmacen, Cod_Pedido, ID_Suministro, cantidad, id_empresa, convert(char(10),fecha_operacion,103),fecha_operacion "+
                                                    "FROM reserva_suministro where id_empresa='"+id_empresa+"' order by fecha_operacion desc");
        return Utiles_Convertir.convertirToBeanBinding_ReservaSuministroTO(consulta.getResultList());
    }
      public Boolean verificarFechasAprobarRequerrimientos() throws Exception {
        Boolean estado=false;
        Parametros param=this.em.find(Parametros.class, "SU5");
        Date fecha = param.getFecha();
        if(fecha.before(new Date())){
            estado=true;
        }
        return estado;

    }
    public Boolean verificarFechasHacerRequerrimientos() throws Exception {
        Boolean estado=false;
        Parametros param1=this.em.find(Parametros.class, "SU4");
        Parametros param2=this.em.find(Parametros.class, "SU5");
        Date fecha1 = param1.getFecha();
        Date fecha2 = param2.getFecha();
        if(fecha1.before(new Date()) && fecha2.after(new Date())){
            estado=true;
        }
        return estado;

    }

    public List<UnidadOrganizativaTO> getListaUnidOrganizativasNecesidad(String anio, String cod_uni_depend) throws Exception {
    Query consulta = this.em.createNativeQuery("select ns.cod_Uni_Organizativa, t.Unidad_Organizativa, t.cod_area, ns.cod_Uni_Depend, t.nivel,ns.estado from necesidades_sumi_aprobacion ns inner join "+
                                                "(SELECT u.cod_Uni_Organizativa, u.Unidad_Organizativa, u.cod_area, u.cod_Uni_Depend, u.nivel,ns.estado FROM Unidad_Organizativa u inner join necesidades_sumi_aprobacion ns on u.cod_Uni_Organizativa=ns.cod_Uni_Organizativa "+
                                                "where ns.cod_Uni_Depend='"+cod_uni_depend+"' and ns.anio='"+anio+"') t "+
                                               " on ns.cod_Uni_Organizativa=t.cod_Uni_Organizativa "+
                                                " where ns.anio='"+anio+"' ");

    return Utiles_Convertir.convertirToBeanBinding_UnidadOrganizativa1(consulta.getResultList());
  }

     public boolean aprobarRequermientosJefatura(String anio,List<UnidadOrganizativaTO> unidades ) throws Exception {
        boolean estado=false;
        Connection cn = dsAdministracion.getConnection();
        String plantilla = "update necesidades_sumi_aprobacion set estado=? where anio=? and cod_Uni_Organizativa=? and cod_Uni_depend=?";
        for(UnidadOrganizativaTO un : unidades){
                PreparedStatement st = cn.prepareStatement(plantilla);
                st.setBoolean(1, un.isEstado_aprobacion());
                st.setString(2, anio);
                st.setString(3, un.getCod_Uni_Organizativa());
                st.setString(4, un.getCod_Uni_Depend());
                st.executeUpdate();

        }
         estado = true;
         cn.close();
        return estado;

    }
     public List<UnidadOrganizativaTO> verificarAprobacionDependencias(String unidad_organizativa) throws Exception {
        Query consulta = this.em.createNativeQuery("select nsa.cod_uni_depend, " +
                " uo.unidad_organizativa, nsa.cod_uni_organizativa, nsa.estado from necesidades_sumi_aprobacion  nsa inner join " +
                " unidad_organizativa uo on nsa.cod_uni_depend=uo.cod_uni_organizativa where " +
                " nsa.cod_uni_organizativa='"+unidad_organizativa+"'");
        return Utiles_Convertir.convertirToBeanBinding_UnidadOrganizativaDependencias(consulta.getResultList());
    }
      public List<SuministroTO> getSuministroAdministrar(String codigo) throws Exception {
    Query consulta = this.em.createNativeQuery("select id_suministro, descripcion, cod_grupo_sumi ,codigo_anterior, precio_mercado," +
            " especificaciones, tipo_unidad_medida, tipo_stock, tipo_ABC,flag_materia_prima, ID_Suministro_descarte from suministros where id_suministro='"+codigo+"'");

    return Utiles_Convertir.convertirToTableBeanBinding_SuministrosAdministrar(consulta.getResultList());
  }
      public List<GrupoSuministrosTO> getListaGrupoSuministros() throws Exception {
    Query consulta = this.em.createNativeQuery("select cod_Grupo_Sumi, Descripcion_grupo from grupo_suministros where cod_grupo_antecesor_Sumi is not null order by Descripcion_grupo");

    return Utiles_Convertir.convertirToBeanBinding_GrupoSuministros(consulta.getResultList());
  }
   public List<GrupoSuministrosTO> getListaGrupoSuministrosPadre() throws Exception {
    Query consulta = this.em.createNativeQuery("select cod_Grupo_Sumi, Descripcion_grupo from grupo_suministros where cod_grupo_antecesor_Sumi is null order by Descripcion_grupo");

    return Utiles_Convertir.convertirToBeanBinding_GrupoSuministros(consulta.getResultList());
  }
       public List<GrupoSuministrosTO> getListaGrupoSuministrosAdministrar(String codigo) throws Exception {
    Query consulta = this.em.createNativeQuery("SELECT cod_grupo_sumi, descripcion_grupo, cod_grupo_antecesor_sumi, ctacomp, ctaser, ctatran,  ctavarex, ctaprov," +
            " ctalink, sobobra, impuesto,actmat, actpro, serpro, donacion, otros, ctainv, acmd, acmh, ctafona, cta4ta, cta721," +
            " ctaod, ctaoh, ctaodi, ctarec,  credfis, ctaalm, tipo_suministros FROM GRUPO_SUMINISTROS where" +
            " cod_grupo_antecesor_sumi is not null and cod_grupo_sumi='"+codigo+"'");
    return Utiles_Convertir.convertirToBeanBinding_GrupoSuministrosAdministrar(consulta.getResultList());
  }


}
